broadway: Fix up surface_at_position
authorMatthias Clasen <mclasen@redhat.com>
Wed, 26 Aug 2020 20:52:03 +0000 (16:52 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 26 Aug 2020 21:56:41 +0000 (17:56 -0400)
gdk/broadway/gdkdevice-broadway.c

index 1a815c278c1ee99af1fd4e50b83d385326abe0df..37be4fa1ef961d0bbec0da037a631db7199affa2 100644 (file)
@@ -233,10 +233,32 @@ gdk_broadway_device_surface_at_position (GdkDevice       *device,
                                          double          *win_y,
                                          GdkModifierType *mask)
 {
-  GdkSurface *surface = NULL;
+  GdkDisplay *display;
+  GdkBroadwayDisplay *broadway_display;
+  gint32 device_root_x, device_root_y;
+  guint32 mouse_toplevel_id;
+  guint32 mask32;
+
+  if (gdk_device_get_source (device) != GDK_SOURCE_MOUSE)
+    return NULL;
+
+  display = gdk_device_get_display (device);
+  broadway_display = GDK_BROADWAY_DISPLAY (display);
+
+  _gdk_broadway_server_query_mouse (broadway_display->server,
+                                    &mouse_toplevel_id,
+                                    &device_root_x,
+                                    &device_root_y,
+                                    &mask32);
 
-  gdk_broadway_device_query_state (device, NULL, win_x, win_y, mask);
+  if (win_x)
+    *win_x = device_root_x;
+  if (win_y)
+    *win_y = device_root_y;
+  if (mask)
+    *mask = mask32;
 
-  return surface;
+  return g_hash_table_lookup (broadway_display->id_ht,
+                              GUINT_TO_POINTER (mouse_toplevel_id));
 }